package git.soulbgm.service;

/**
 * 告警信息上报接口
 *
 * @author SoulBGM
 * @date 2021-08-19 13:45:05
 */
public interface AlarmInfoReport {

    /**
     * 监控客户端检测的CPU,内存,网络上行下行流量的使用阈值超过告警
     *
     * @param nodeCode     节点编号
     * @param ruleType     规则类型
     * @param eventCode    事件编号
     * @param alarmContent 告警内容
     * @param value        检测数值
     */
    void nodeUsedThresholdExceededAlarm(Integer nodeCode, String ruleType, String eventCode, String alarmContent, Double value);

    /**
     * 监控客户端检测的CPU,内存,网络上行下行流量的使用阈值没有超过时消除告警
     *
     * @param nodeCode  节点编号
     * @param ruleType  规则类型
     * @param eventCode 事件编号
     * @param value     检测数值
     */
    void nodeUsedThresholdExceededClearAlarm(Integer nodeCode, String ruleType, String eventCode, Double value);

    /**
     * 监控客户端检测的CPU,内存,网络上行下行流量的使用阈值超过告警
     *
     * @param nodeCode     节点编号
     * @param ruleType     规则类型
     * @param eventCode    事件编号
     * @param alarmContent 告警内容
     * @param value        检测数值
     */
    void nodeDiskUsedThresholdExceededAlarm(Integer nodeCode, String ruleType, String eventCode, String dirName, String alarmContent, Double value);

    /**
     * 监控客户端检测的CPU,内存,网络上行下行流量的使用阈值没有超过时消除告警
     *
     * @param nodeCode  节点编号
     * @param ruleType  规则类型
     * @param eventCode 事件编号
     * @param value     检测数值
     */
    void nodeDiskUsedThresholdExceededClearAlarm(Integer nodeCode, String ruleType, String eventCode, String dirName, Double value);

    /**
     * 节点(监控客户端)重新启动告警
     *
     * @param nodeCode     节点编号
     * @param alarmContent 告警内容
     */
    void nodeRebootAlarm(Integer nodeCode, String alarmContent);

    /**
     * 节点(监控客户端)宕机告警
     *
     * @param nodeCode     节点编号
     * @param alarmContent 告警内容
     */
    void nodeShutdownAlarm(Integer nodeCode, String alarmContent);

    /**
     * 节点(监控客户端)启动之后的消除告警
     *
     * @param nodeCode 节点编号
     */
    void nodeStartingClearAlarm(Integer nodeCode);

    /**
     * 服务重新启动告警
     *
     * @param nodeCode     节点编号
     * @param serviceCode  服务编号
     * @param alarmContent 告警内容
     */
    void serviceRebootAlarm(Integer nodeCode, Integer serviceCode, String alarmContent);

    /**
     * 服务宕机告警
     *
     * @param nodeCode     节点编号
     * @param serviceCode  服务编号
     * @param alarmContent 告警内容
     */
    void serviceShutdownAlarm(Integer nodeCode, Integer serviceCode, String alarmContent);

    /**
     * 服务启动之后的消除告警
     *
     * @param nodeCode    节点编号
     * @param serviceCode 服务编号
     */
    void serviceStartingClearAlarm(Integer nodeCode, Integer serviceCode);

    /**
     * 软件重新启动告警
     *
     * @param nodeCode     节点编号
     * @param processName  软件进程名称
     * @param alarmContent 告警内容
     */
    void softwareRebootAlarm(Integer nodeCode, String processName, Integer checkPort, String alarmContent);

    /**
     * 软件宕机告警
     *
     * @param nodeCode     节点编号
     * @param processName  软件进程名称
     * @param alarmContent 告警内容
     */
    void softwareShutdownAlarm(Integer nodeCode, String processName, Integer checkPort, String alarmContent);

    /**
     * 软件启动之后的消除告警
     *
     * @param nodeCode    节点编号
     * @param processName 软件进程名称
     */
    void softwareStartingClearAlarm(Integer nodeCode, String processName, Integer checkPort);

    /**
     * 监控客户端检测的时间同步异常告警
     *
     * @param nodeCode     节点编号
     * @param ruleType     规则类型
     * @param eventCode    事件编号
     * @param alarmContent 告警内容
     * @param value        值
     */
    void nodeTimeSyncExceptionAlarm(Integer nodeCode, String ruleType, String eventCode, String alarmContent, Double value);

    /**
     * 监控客户端检测的时间同步异常消除告警
     *
     * @param nodeCode  节点编号
     * @param ruleType  规则类型
     * @param eventCode 事件编号
     * @param value     值
     */
    void nodeTimeSyncExceptionClearAlarm(Integer nodeCode, String ruleType, String eventCode, Double value);

    /**
     * 设备ping失败报警
     *
     * @param ip           设备接口IP
     * @param alarmContent 告警内容
     */
    void equipmentPingFailureAlarm(String ip, String alarmContent);

    /**
     * 设备ping成功后消除告警
     *
     * @param ip 设备接口IP
     */
    void equipmentPingSuccessClearAlarm(String ip);

    /**
     * 工作执行异常报警
     *
     * @param alarmContent 报警内容
     * @param className    类名
     */
    void jobExecuteExceptionAlarm(String alarmContent, String className);

    /**
     * 线程阻塞告警
     *
     * @param nodeCode     节点编号
     * @param serviceCode  服务编号
     * @param alarmContent 告警内容
     * @param poolName     线程池名称
     */
    void threadBlockingAlarm(Integer nodeCode, Integer serviceCode, String poolName, String alarmContent);

}
